package com.gosophia.metadataEngine.ws.test.integration;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.xml.ws.WebServiceException;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.transaction.annotation.Transactional;

import com.gosophia.commons.Page;
import com.gosophia.commons.PropertyFilter;
import com.gosophia.commons.PropertyFilter.OperatorType;
import com.gosophia.commons.exception.BusinessException;
import com.gosophia.metadataEngine.dto.DataSourceInfoDto;
import com.gosophia.metadataEngine.dto.MetaDataFieldDto;
import com.gosophia.metadataEngine.dto.MetaDataTableDto;
import com.gosophia.metadataEngine.entity.DataSourceInfo;
import com.gosophia.metadataEngine.entity.MetaDataField;
import com.gosophia.metadataEngine.entity.MetaDataTable;
import com.gosophia.metadataEngine.ws.MetadataEngineWebService;

/**
 * MetadataEngineWebServiceImpl的集成测试类
 * 
 * @author tianchunyu
 * @date 2010-9-17
 */
@ContextConfiguration(locations = { "classpath*:moduleContext.xml",
        "classpath:applicationContext-it.xml" })
@Transactional
public class ITMetaDataEngineWebServiceImpl extends
        AbstractTransactionalJUnit4SpringContextTests {

    @Autowired
    private MetadataEngineWebService metaDataEngineWebService;

//    @Autowired
//    private SessionFactory sf;
    @Test
    public void test(){
    	
    }

//    /**
//     * 测试findSystemDataDetail方法
//     */
//    @Test
//    public void testFindSystemDataDetail() {
//        Map<String, Object> map = metaDataEngineWebService.findSystemDataDetail(1L,6L);
//        Assert.assertEquals(map.get("name"), "user1");
//    }
//
//    @Test
//    public void testFindSystemFieldByTableId() throws BusinessException {
//        List<MetaDataFieldDto> list = metaDataEngineWebService
//                .findSystemFieldByTableId(6L);
//        Assert.assertEquals(list.size(), 5);
//    }
//
//    /**
//     * 测试addDataSourceInfo方法，当dataSourceInfoDto为null时
//     * @throws BusinessException 
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testAddDataSourceInfoWithNull() throws  BusinessException {
//        metaDataEngineWebService.addDataSourceInfo(null);
//    }
//
//    /**
//     * 测试addDataSourceInfo方法，当dataSourceInfoDto.id不为null时
//     * @throws BusinessException 
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testAddDataSourceInfoWithIdNotNull() throws  BusinessException {
//        DataSourceInfoDto dataSourceInfoDto = new DataSourceInfoDto();
//        dataSourceInfoDto.setDataSourceInfoId(100L);
//        dataSourceInfoDto.setDialect("dialect");
//        dataSourceInfoDto.setDriverClass("driverClass");
//        dataSourceInfoDto.setFormatSql("formatSql");
//        dataSourceInfoDto.setName("name");
//        dataSourceInfoDto.setNote("note");
//        dataSourceInfoDto.setPassword("password");
//        dataSourceInfoDto.setShowSql("showSql");
//        dataSourceInfoDto.setUrl("url");
//        dataSourceInfoDto.setUsername("username");
//        dataSourceInfoDto.setVersion(0L);
//        metaDataEngineWebService.addDataSourceInfo(dataSourceInfoDto);
//    }
//
//    /**
//     * 测试addDataSourceInfo方法
//     * @throws BusinessException 
//     */
//    @Test
//    public void testAddDataSourceInfoNormal() throws  BusinessException {
//        DataSourceInfoDto dataSourceInfoDto = new DataSourceInfoDto();
//        dataSourceInfoDto.setDialect("dialect1");
//        dataSourceInfoDto.setDriverClass("driverClass1");
//        dataSourceInfoDto.setFormatSql("formatSql1");
//        dataSourceInfoDto.setName("name1");
//        dataSourceInfoDto.setNote("note1");
//        dataSourceInfoDto.setPassword("password1");
//        dataSourceInfoDto.setShowSql("showSql1");
//        dataSourceInfoDto.setUrl("url1");
//        dataSourceInfoDto.setUsername("username1");
//        dataSourceInfoDto.setVersion(0L);
//        metaDataEngineWebService.addDataSourceInfo(dataSourceInfoDto);
//        Query q = sf.getCurrentSession().createQuery(
//                "from DataSourceInfo d where d.name = ?");
//        q.setString(0, "name1");
//        List<DataSourceInfo> dataSourceInfos = q.list();
//        Assert.assertEquals(dataSourceInfos.get(0).getDriverClass(),
//                "driverClass1");
//    }
//
//    /**
//     * 测试addMetaDataField方法
//     * @throws BusinessException 
//     */
//    @Test
//    public void testAddMetaDataFieldNormal() throws  BusinessException {
//        MetaDataFieldDto metaDataFieldDto = new MetaDataFieldDto();
//        metaDataFieldDto.setColWidth(200);
//        metaDataFieldDto.setFieldName("fieldName");
//        metaDataFieldDto.setFieldNameCN("fieldNameCN");
//        metaDataFieldDto.setFieldOrder(1);
//        metaDataFieldDto.setFieldType("fieldType");
//        metaDataFieldDto.setIsLink(true);
//        metaDataFieldDto.setIsPk(false);
//        metaDataFieldDto.setMetaDataTableId(6L);
//        metaDataFieldDto.setPrivateName("privateName");
//        metaDataFieldDto.setRefValue(101L);
//        metaDataFieldDto.setShowFlag("D");
//        metaDataFieldDto.setVersion(0L);
//
//        List<MetaDataFieldDto> metaDataFieldDtos = new ArrayList<MetaDataFieldDto>();
//        metaDataFieldDtos.add(metaDataFieldDto);
//
//        metaDataEngineWebService.addMetaDataField(metaDataFieldDtos);
//        Query q = sf.getCurrentSession().createQuery(
//                "from MetaDataField m where m.fieldName = ?");
//        q.setString(0, "fieldName");
//        List<MetaDataField> metaDataFields = q.list();
//        Assert.assertEquals(metaDataFields.get(0).getPrivateName(),
//                "privateName");
//    }
//
//    /**
//     * 测试addMetaDataTable方法，当metaDataTable为null时
//     * @throws BusinessException 
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testAddMetaDataTableWithNull() throws  BusinessException {
//        metaDataEngineWebService.addMetaDataTable(null);
//    }
//
//    /**
//     * 测试addMetaDataTable方法，当metaDataTable.id不为null时
//     * @throws BusinessException 
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testAddMetaDataTableWithIdNotNull() throws  BusinessException {
//        MetaDataTableDto metaDataTableDto = new MetaDataTableDto();
//        metaDataTableDto.setDataSourceInfoId(1L);
//        metaDataTableDto.setEntityClassName("entityClassName");
//        metaDataTableDto.setMetaDataTableId(100L);
//        metaDataTableDto.setTableName("tableName");
//        metaDataTableDto.setTableNameCN("tableNameCN");
//        metaDataTableDto.setVersion(0L);
//        metaDataEngineWebService.addMetaDataTable(metaDataTableDto);
//    }
//
//    /**
//     * 测试addMetaDataTable方法
//     * @throws BusinessException 
//     */
//    @Test
//    public void testAddMetaDataTableNormal() throws  BusinessException {
//        MetaDataTableDto metaDataTableDto = new MetaDataTableDto();
//        metaDataTableDto.setDataSourceInfoId(1L);
//        metaDataTableDto.setEntityClassName("entityClassName");
//        metaDataTableDto.setTableName("tableName");
//        metaDataTableDto.setTableNameCN("tableNameCN");
//        metaDataTableDto.setVersion(0L);
//        metaDataEngineWebService.addMetaDataTable(metaDataTableDto);
//        Query q = sf.getCurrentSession().createQuery(
//                "from MetaDataTable m where m.tableName = ?");
//        q.setString(0, "tableName");
//        List<MetaDataTable> metaDataTables = q.list();
//        Assert.assertEquals(metaDataTables.get(0).getEntityClassName(),
//                "entityClassName");
//    }
//
//    /**
//     * 测试findAllDataSourceInfo方法
//     */
//    @Test
//    public void testFindAllDataSourceInfoByPageNormal() {
//        Page<DataSourceInfoDto> dataSourceInfoDto = metaDataEngineWebService
//                .findAllDataSourceInfoByPage(10, 1,null,null);
//        Assert.assertEquals(dataSourceInfoDto.getResult().get(0)
//                .getDataSourceInfoId().longValue(), 1L);
//    }
//
//    /**
//     * 测试findAllMetaDataTable方法,当分页信息中pageNO<0时
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testFindAllMetaDataTableByPageWithPageNoLessThan0() {
//        metaDataEngineWebService.findAllMetaDataTableByPage(10, -1);
//    }
//
//    /**
//     * 测试findAllMetaDataTable方法,当分页信息中pageSize<0时
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testFindAllMetaDataTableByPageWithPageSizeLessThan0() {
//        metaDataEngineWebService.findAllMetaDataTableByPage(-10, 1);
//    }
//
//    /**
//     * 测试findAllMetaDataTable方法
//     */
//    @Test
//    public void testFindAllMetaDataTableNormal() {
//        Page<MetaDataTableDto> pageDto = metaDataEngineWebService
//                .findAllMetaDataTableByPage(10, 1);
//        Assert.assertEquals(pageDto.getResult().get(0).getDataSourceInfoId()
//                .longValue(), 1L);
//    }
//
//    /**
//     * 测试findDataSourceInfoById方法,当Id为null时
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testFindDataSourceInfoByIdWithIdNull() {
//        metaDataEngineWebService.findDataSourceInfoById(null);
//    }
//
//    /**
//     * 测试findDataSourceInfoById方法
//     */
//    @Test
//    public void testFindDataSourceInfoByIdNormal() {
//        DataSourceInfoDto dataSourceInfoDto = metaDataEngineWebService
//                .findDataSourceInfoById(1L);
//        Assert.assertNotNull(dataSourceInfoDto);
//    }
//
//    /**
//     * 测试findMetaDataFieldByTableId方法,当id为null时
//     */
//    @Test(expected = IllegalArgumentException.class)
//    public void testFindMetaDataFieldByTableIdWithIdNull() {
//        metaDataEngineWebService.findMetaDataFieldByTableId(null);
//    }
//
//    /**
//     * 测试findMetaDataFieldByTableId方法
//     */
//    @Test
//    public void testFindMetaDataFieldByTableIdNormal() {
//        List<MetaDataFieldDto> metaDataFieldDtos = metaDataEngineWebService
//                .findMetaDataFieldByTableId(6L);
//       Assert.assertNotNull(metaDataFieldDtos);
//       Assert.assertEquals(5, metaDataFieldDtos.size());
//    }
//
//    /**
//     * 测试findMetaDataFieldByTableIdDetailShow方法
//     */
//    @Test
//    public void testFindMetaDataFieldByTableIdDetailShowNormal() {
//        List<MetaDataFieldDto> metaDataFieldDtos = metaDataEngineWebService
//                .findMetaDataFieldByTableIdDetailShow(6L);
//        Assert.assertNotNull(metaDataFieldDtos);
//        Assert.assertEquals(1,metaDataFieldDtos.size());
//    }
//
//    /**
//     * 测试findMetaDataTableById方法
//     */
//    @Test
//    public void testFindMetaDataTableByIdNormal() {
//        MetaDataTableDto metaDataTableDto = metaDataEngineWebService
//                .findMetaDataTableById(6L);
//        Assert.assertNotNull(metaDataTableDto);
//    }
//    /**
//     * 测试updateMetaDataTable方法
//     * @throws BusinessException 
//     */
//    @Test
//    public void testUpdateMetaDataTableNormal() throws BusinessException {
//        MetaDataTableDto metaDataTableDto = new MetaDataTableDto();
//        metaDataTableDto.setMetaDataTableId(6L);
//        metaDataTableDto.setDataSourceInfoId(1L);
//        metaDataTableDto.setEntityClassName("entityClassName");
//        metaDataTableDto.setTableName("tableName");
//        metaDataTableDto.setTableNameCN("tableNameCN");
//        metaDataTableDto.setVersion(0L);
//        metaDataEngineWebService.updateMetaDataTable(metaDataTableDto);
//    }

}
